<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    /* 
      Promise的then方法
        - then方法是同步绑定的,但是then中的回调函数是异步的,需要等到调用then的promise实例状态发生改变
        - then方法接收两个回调函数,分别处理成功promise实例和失败promise实例的逻辑
        - then接收的两个回调函数接受两个参数,分别是成功promise的值和失败promise的值

      then的返回值:
        1. then默认返回一个成功状态的promise实例,值是回调函数的返回值
        2. 当then中的回调函数返回一个promise实例的时候,则then方法的返回值,和这个promise实例保持一致
        3. 当then中有报错但是没有被处理的时候,则then直接返回失败的promsie实例,值为错误信息
    */

    const p1 = new Promise((resolve,reject)=>{
      console.log("请求数据a...");
      try{
        // throw new Error("网络错误~~~")
        setTimeout(()=>{
          console.log("数据a请求成功!!!");
          resolve("数据a请求成功!!!")
        },2000)
      }catch(e){
        reject(e.message)
      }
    })
    console.log("p1",p1);

    const p2 = p1.then((value)=>{
      console.log("成功",value);

      return new Promise((resolve,reject)=>{
        console.log("请求数据b...");
        try{
          // throw new Error("网络错误~~~")
          setTimeout(()=>{
            console.log("数据b请求成功!!!");
            resolve("数据b请求成功!!!")
          },3000)
        }catch(e){
          reject(e.message)
        }
      })

    })
    console.log("p2",p2);

    const p3 = p1.catch((reason)=>{
        console.log(reason);
        return new Promise((resolve,reject)=>{
            // resolve(1)
            reject(2)
        })
    })
    console.log("p3",p3);
  </script>
</body>
</html>